import 'dart:convert';
import 'dart:io';
import 'dart:typed_data';

import 'package:bruno/bruno.dart';
import 'package:dio/dio.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:image_picker/image_picker.dart';
import 'package:permission_handler/permission_handler.dart';

import '../../AppConfig/Config.dart';
import '../../AppConfig/LocalStorage.dart';
import '../../AppConfig/ShowDialog.dart';
import '../../Authentication/AuthenticationModel/QualificationsModel.dart';
import '../../http/api.dart';
import '../../l10n/messages.dart';
import 'package:image/image.dart' as img;

import 'EditCarCard.dart';
import 'ShowImageView.dart';
class EditQualification extends StatefulWidget {
  const EditQualification({super.key, required this.dataMap});
  final Map dataMap;
  @override
  State<EditQualification> createState() => _EditQualificationState();
}

class _EditQualificationState extends State<EditQualification> {
  List titleList=["姓名","从业资格证号","从业资格类别","有效期至"];

  List dataList =["","","",""];
  late String ChooseIndex="";
  final ImagePicker picker = new ImagePicker();
  //用户本地图片
  File? _userImage;
  File? _userImage2;//存放获取到的本地路径
  int oneCheck =0;
  String cardImgStr="";
  String cardImgStr2="";
  Map dataMap={};
  String getFrontPath="";
  bool isEdit=true;
  bool isShowError=false;
  TextEditingController _nametextEditingController = TextEditingController();

  QualiModel qualiModel =QualiModel(DriverPic: "", DriverPic2: "", name: "", MesNum: "", MesType: "",
      EndTime: "", RoadNum: "", ConName: "", Adress: "", CarNum: "", ConNum: "",
      CarSytle: "", CarLength: "", AddTime: "");


  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    if(widget.dataMap['qualificationCertificateInfo']!=null) {
      isEdit=false;
      dataList = [
        widget.dataMap['qualificationCertificateInfo']['realName'],
        widget
            .dataMap['qualificationCertificateInfo']['qualificationCertificate'],
        widget.dataMap['qualificationCertificateInfo']['realName'],
        widget.dataMap['qualificationCertificateInfo']['expiryDate'],
      ];
    }
    if(widget.dataMap['qualificationCertificateInfo']!=null)
      getFrontPath=widget.dataMap['qualificationCertificateInfo']['frontPath'];
  }
  @override
  Future<DateTime?> _showDatePickerForTheme(BuildContext context) {
    return showDatePicker(
      context: context, // 上下文
      initialDate: DateTime.now(), // 初始化选中日期
      firstDate: DateTime.now(), // 开始日期
      lastDate: DateTime(2100, 1), // 结束日期
      currentDate: DateTime.now(), // 当前日期
      initialEntryMode: DatePickerEntryMode
          .calendarOnly, // 日历弹框样式 calendar: 默认显示日历，可切换成输入模式，input:默认显示输入模式，可切换到日历，calendarOnly:只显示日历，inputOnly:只显示输入模式
      selectableDayPredicate: (dayTime) {
        // 自定义哪些日期可选
        if (dayTime == DateTime(2022, 1, 1) || dayTime == DateTime(2100, 1, 1)) {
          return false;
        }
        return true;
      },
      builder: (context, child) {
        return Theme(
          data: ThemeData(
            primarySwatch: Colors.amber,
          ),
          child: child!,
        );
      },
      helpText: "请选择日期", // 左上角提示文字
      cancelText: "取消", // 取消按钮 文案
      confirmText: "确定", // 确认按钮 文案
      initialDatePickerMode: DatePickerMode.day, // 日期选择模式 默认为天
      useRootNavigator: true, // 是否使用根导航器
      textDirection: TextDirection.ltr, // 水平方向 显示方向 默认 ltr
    );
  }


  void uploadOcrAction()  {
    LoadingDialog.show(context);

    dio.interceptors.add(InterceptorsWrapper(
        onRequest: (options, handler) async {
          options.headers["satoken"] = await TokenManager.getToken();
          return handler.next(options);
        }
    ));
    dio
        .post(
      MyServiceUrl.header+'api/system/dev/ocr/doOcr',
      data: {

        "type": "QC",
        "frontFileFormat": "jpg",
        "frontData": cardImgStr,
        "backFileFormat":"",
        "backData": "",
      },
      options: Options(
        sendTimeout: Duration(seconds: 2),
        receiveTimeout: Duration(seconds: 5),
      ),

    )
        .then((r) {
      setState(() {
        print(r);
        Map<String, dynamic> jsonMap = json.decode(
            r.toString());
        LoadingDialog.hide(context);
        // 获取code和data
        String code = jsonMap['code'].toString();
        if (code == "200") {
          print("code：$code");
          BrnToast.show(
            "识别成功",
            context,
            duration: BrnDuration.short,
          );
          getFrontPath=jsonMap['data']['frontPath'];
        }
      });
    }).catchError((error) {
      print(error);
      ;
    });
  }
  void uploadRtcOcrAction()  {
    ApiManager.postData(
      context,
      'api/system/dev/ocr/doOcr',
      {
        "type": "QC",
        "frontFileFormat": "JPG",
        "frontData": cardImgStr2,
        "backFileFormat":"",
        "backData": "",
      },
          (responseData) {
        setState(() {
          if(responseData['data']['result']==null|| responseData['data']['result']['certificateNumber']==null|| responseData['data']['result']['realName']==null) {
            BrnToast.show(
              "请上传清晰的图片用于识别", context, duration: BrnDuration.short,);
          }else if(responseData['data']['result']['qualificationCategoryList'].length>0) {

            BrnToast.show(
              "识别成功",
              context,
              duration: BrnDuration.short,
            );

              dataMap =
              responseData['data']['result']['qualificationCategoryList'][0];
              dataList = [
                responseData['data']['result']['realName'],
                responseData['data']['result']['certificateNumber'],
                dataMap['expiryDate'],
                dataMap['expiryDate']
              ];
              getFrontPath = responseData['data']['frontPath'];

          }else{
            BrnToast.show(
              "请上传清晰的图片用于识别", context, duration: BrnDuration.short,);
          }
        });
      },
    );


  }
  String imageToBase64(File imageFile) {
    List<int> imageBytes = imageFile.readAsBytesSync();
    String base64String = base64Encode(Uint8List.fromList(imageBytes));

    return base64String;
  }


  void printImageMemorySize(File imageFile) {
    List<int> imageBytes = imageFile.readAsBytesSync();
    print('Original Image Memory Size: ${imageBytes.length} bytes');
  }

  Future<void> compressImage(File imageFile) async {
    List<int> imageBytes = await imageFile.readAsBytes();
    img.Image image = img.decodeImage(Uint8List.fromList(imageBytes))!;

    // Adjust the quality and size as needed
    img.Image compressedImage = img.copyResize(image, width: 1024);

    List<int> compressedBytes = img.encodeJpg(compressedImage, quality: 80);

    // Create a new File for the compressed image
    File compressedFile = File('${imageFile.path}_compressed.jpg');
    await compressedFile.writeAsBytes(compressedBytes);

    print('Compressed Image Size: ${compressedBytes.length} bytes');

    convertToBase64(compressedFile);
  }

  Future<void> convertToBase64(File imageFile) async {
    List<int> imageBytes = await imageFile.readAsBytes();
    String base64String = base64Encode(imageBytes);
    print('Base64 String: $base64String');
    oneCheck==1?
    cardImgStr =base64String
        :cardImgStr2 =base64String;
    oneCheck==1?
    uploadOcrAction():uploadRtcOcrAction();

  }


  @override
  Widget build(BuildContext context) {
    var messages = AppLocalizations.of(context)!;
    final screenSize = MediaQuery.of(context).size;
    return Scaffold(

      backgroundColor:Color.fromRGBO(248, 248, 248, 1),
      appBar: AppBar(
        title: Text("从业资格证",style: TextStyle(fontWeight: FontWeight.w300,fontSize: 16.sp),),
        centerTitle: true,
        backgroundColor: Colors.white,
        leading: IconButton(
          icon: Icon(Icons.arrow_back_ios, color: Colors.black),
          onPressed: () => Navigator.of(context).pop(),
        ),
      ),
      body: Column(
        children: [
          Expanded(child:
          ListView(

            children: [


              Container(
                color: Colors.white,
                height: 140.h,
                child:Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [

                    SizedBox(height: 8.h,),
                    Row(
                      children: [
                        SizedBox(width: 18.w,),
                        Text("上传从业资格证(必填)",style: TextStyle(color: Colors.black,fontWeight: FontWeight.w600,fontSize: 14.sp),),
                      ],
                    ),

                    SizedBox(height: 8.h,),
                    Row(
                      mainAxisAlignment: MainAxisAlignment.start,

                      children: [
                        SizedBox(width: 18.w,),
                        GestureDetector(
                          child:
                          getFrontPath!=""&&_userImage==null?
                          Stack(
                            children: [
                              Container(
                                height: 90.h,
                                width: 150.w,
                                child:   Image.network(MyServiceUrl.imgHeader+getFrontPath ,height: 90.h,width: 150.w,fit: BoxFit.cover,),
                              ),
                              if(isEdit)
                              Center(
                                child: Image.asset("lib/Images/Authentication/重新上传.png" ,height: 20.h,width: 50.w,),
                              ),
                            ],
                            alignment: Alignment.center,
                          )
                              :getFrontPath!=""&&_userImage!=null?
                          Stack(

                            children: [

                              Container(
                                height: 90.h,
                                width: 150.w,
                                child: Image.file(_userImage!,height: 90.h,width: 150.w,fit: BoxFit.cover,) ,
                              ),
                              if(isEdit)
                                Center(
                                  child: Image.asset("lib/Images/Authentication/重新上传.png" ,height: 20.h,width: 50.w,),
                                ),
                            ],
                            alignment: Alignment.center,
                          )

                              :
                          Image.asset("lib/Images/Authentication/上传从业资格证.png" ,height: 90.h,width: 150.w,),
                          onTap: () async{
                            if(isEdit==false){
                              Navigator.push(
                                context,
                                MaterialPageRoute(
                                  builder: (context) => ShowImageViewer( (MyServiceUrl.imgHeader+getFrontPath).toString()),
                                ),
                              );
                            }else {
                              showModalBottomSheet(context: context,
                                  builder: (BuildContext context) {
                                    return Container(
                                      decoration: BoxDecoration(
                                          color: Colors.white,
                                          borderRadius: BorderRadius.all(
                                              Radius.circular(10))),
                                      child:
                                      Stack(

                                        children: [

                                          Column(
                                            mainAxisSize: MainAxisSize.min,
                                            mainAxisAlignment: MainAxisAlignment
                                                .center,

                                            children: [

                                              Row(
                                                mainAxisAlignment: MainAxisAlignment
                                                    .end,
                                                children: [
                                                  IconButton(onPressed: () {
                                                    Navigator.of(context).pop();
                                                  },
                                                      icon: Icon(Icons.close,
                                                        color: MyColors
                                                            .textColor,)),
                                                ],
                                              ),
                                              Text(messages["示例"],
                                                style: TextStyle(
                                                    color: Colors.black,
                                                    fontSize: 14.sp),),
                                              SizedBox(height: 8.h,),
                                              Image.asset(
                                                'lib/Images/Authentication/从业资格证示例图.png',
                                                width: 2270.w, height: 145.h,),
                                              SizedBox(height: 8.h,),
                                              Text(messages["请按照示例上传"],
                                                style: TextStyle(
                                                    color: Color.fromRGBO(
                                                        102, 102, 102, 1)),),
                                              Text(
                                                messages["模糊、遮挡会导致证件无法识别，认证不通过"],
                                                style: TextStyle(
                                                    color: Color.fromRGBO(
                                                        102, 102, 102, 1)),),
                                              SizedBox(height: 8.h,),
                                              Text(messages["上传照片"],
                                                style: TextStyle(
                                                    color: Colors.black,
                                                    fontWeight: FontWeight.w600,
                                                    fontSize: 18.sp),),
                                              SizedBox(height: 10.h,),
                                              Row(
                                                children: [
                                                  SizedBox(width: 38.w,),
                                                  GestureDetector(
                                                    child: Column(
                                                      children: [
                                                        Image.asset(
                                                          "lib/Images/Authentication/相册icon.png",
                                                          width: 35.w,
                                                          height: 35.h,),
                                                        Text(messages["相册"],
                                                          style: TextStyle(
                                                              color: Colors
                                                                  .black),),

                                                      ],

                                                    ),
                                                    onTap: () async {
                                                      var status = await Permission.photos.request();
                                                      if(status==PermissionStatus.denied){
                                                        showPhotosFirstDialog(context);
                                                      }else if(status==PermissionStatus.permanentlyDenied){
                                                        showPhotosDialog(context);
                                                      }else {
                                                        Navigator.of(context)
                                                            .pop();
                                                        final pickedFile = await picker
                                                            .pickImage(
                                                            source: ImageSource
                                                                .gallery);

                                                        if (pickedFile != null) {
                                                          setState(() {
                                                            _userImage = File(
                                                                pickedFile.path);
                                                            printImageMemorySize(
                                                                _userImage!);

                                                            compressImage(
                                                                _userImage!);
                                                          });
                                                        }
                                                      }
                                                    },
                                                  ),

                                                  SizedBox(width: 38.w,),
                                                  GestureDetector(
                                                    child: Column(
                                                      children: [
                                                        Image.asset(
                                                          "lib/Images/Authentication/拍照icon.png",
                                                          width: 35.w,
                                                          height: 35.h,),
                                                        Text(messages["拍照"],
                                                          style: TextStyle(
                                                              color: Colors
                                                                  .black),),

                                                      ],

                                                    ),
                                                    onTap: () async {
                                                      var status = await Permission.camera.request();
                                                      if(status==PermissionStatus.denied){
                                                        showCameraFirstDialog(context);
                                                      }else if(status==PermissionStatus.permanentlyDenied){
                                                        showCameraDialog(context);
                                                      }else {
                                                        Navigator.of(context)
                                                            .pop();
                                                        final pickedFile = await picker
                                                            .pickImage(
                                                            source: ImageSource
                                                                .camera);

                                                        if (pickedFile != null) {
                                                          setState(() {
                                                            _userImage = File(
                                                                pickedFile.path);
                                                            printImageMemorySize(
                                                                _userImage!);

                                                            compressImage(
                                                                _userImage!);
                                                          });
                                                        }
                                                      }
                                                    },
                                                  ),

                                                ],
                                              ),
                                              SizedBox(height: 30.h,),
                                            ],

                                          ),

                                        ],

                                      ),
                                    );
                                  });
                            }
                          },
                        ),



                      ],
                    ),




                  ],
                ) ,
              ),
              SizedBox(height: 8.h,),

              Container(
                margin: EdgeInsets.only(left: 8.w,right: 8.w),
                height: 180.h,
                child:  ListView.separated(
                    physics: NeverScrollableScrollPhysics(),
                    itemCount:4,
                    separatorBuilder: (BuildContext context, int index) {
                      return index==2?SizedBox(height: 0,): Container(  // 这里使用 Divider 作为分隔符
                        color: Color.fromRGBO(248, 248, 248, 1),
                        height: 8.h,  // 分隔符的高度
                      );
                    },
                    itemBuilder:(context, index) {
                      return Padding(padding:

                      EdgeInsets.only(left: 8.w,right: 8.w),
                        child:  index==2?SizedBox(height: 0,):
                        GestureDetector(
                            child: Container(height: 40.h,
                          decoration: BoxDecoration(
                              border: Border.all(
                                color:isShowError==true&&dataList[index]==''? Colors.red:Colors.white, // 边框颜色
                                width: 0.5, // 边框宽度
                              ),
                              color: Colors.white,
                              borderRadius: BorderRadius.all(Radius.circular(10))),
                          child:
                          Row(
                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
                            children: [
                              Row(
                                children: [
                                  SizedBox(width: 8.h,),
                                  Text(titleList[index],style: TextStyle(color: Colors.black,fontSize: 14.sp),),
                                ],
                              ),
                               Row(
                                    children: [
                                      Container(
                                        width: screenSize.width-180.w,
                                        child: Text(dataList[index],textAlign: TextAlign.right,style: TextStyle(color:Colors.black,overflow:TextOverflow.ellipsis,fontSize: 14.sp),),
                                      ),
                                      isEdit?
                                      Icon(Icons.arrow_forward_ios,color: MyColors.authTipColor,size: 14,):SizedBox(width: 10.w,),
                                    ],
                                  ),
                            ],
                          ),
                        ),
                            onTap: () async {
                              if (isEdit) {
                                if (index == 3) {
                                  final result = await showModalBottomSheet(
                                    context: context,
                                    builder: (BuildContext context) {
                                      return dataTimeSheet(
                                      );
                                    },
                                  );

                                  if (result != null) {
                                    String mounth = "";
                                    String day = "";

                                    setState(() {
                                      if (result[1]
                                          .toString()
                                          .length == 1) {
                                        mounth = result[1].toString().padLeft(
                                            2, '0');
                                      } else {
                                        mounth = result[1].toStringAsFixed(0);
                                      }
                                      if (result[2]
                                          .toString()
                                          .length == 1) {
                                        day = result[2].toString().padLeft(
                                            2, '0');
                                      } else {
                                        day = result[2].toStringAsFixed(0);
                                      }

                                      String Time = result[0].toString() + "-" +
                                          mounth + "-" + day;
                                      dataList[2] = Time;
                                      qualiModel.EndTime = Time;
                                      _nametextEditingController.text =
                                          qualiModel.EndTime;
                                    });
                                  }
                                } else {
                                  _nametextEditingController.text =
                                  dataList[index];
                                  showModalBottomSheet(
                                      isDismissible: false,
                                      context: context,

                                      builder: (BuildContext context) {
                                        return Container(

                                          color: Color.fromRGBO(
                                              255, 255, 255, 1),
                                          child: Column(

                                            children: [

                                              SizedBox(height: 8.h,),
                                              Row(
                                                mainAxisAlignment: MainAxisAlignment
                                                    .spaceBetween,
                                                children: [
                                                  TextButton(onPressed: () {
                                                    Navigator.of(context)
                                                        .pop();
                                                    setState(() {
                                                      if (index == 0) {
                                                        qualiModel.name =
                                                        dataList[index];
                                                      } else if (index == 1) {
                                                        qualiModel.MesNum =
                                                        dataList[index];
                                                      } else if (index == 2) {
                                                        qualiModel.MesType =
                                                        dataList[index];
                                                      }

                                                      _nametextEditingController
                                                          .text =
                                                      dataList[index];
                                                    });
                                                  },
                                                      child: Text(
                                                        messages["取消"],
                                                        style: TextStyle(
                                                            color: Colors
                                                                .black),)),
                                                  Text(
                                                    titleList[index] + "输入",
                                                    style: TextStyle(
                                                        color: Colors.black,
                                                        fontSize: 16.sp,
                                                        fontWeight: FontWeight
                                                            .w600),),
                                                  TextButton(onPressed: () {
                                                    Navigator.of(context).pop();

                                                    setState(() {
                                                      if (index == 0) {
                                                        dataList[index] =
                                                            qualiModel.name;
                                                      } else if (index == 1) {
                                                        dataList[index] =
                                                            qualiModel.MesNum;
                                                      } else if (index == 2) {
                                                        dataList[index] =
                                                            qualiModel.MesType;
                                                      }

                                                      _nametextEditingController
                                                          .text =
                                                      dataList[index];
                                                    });
                                                  },
                                                    child: Text(
                                                      messages["确定"],
                                                      style: TextStyle(
                                                          color: Color.fromRGBO(
                                                              231, 112, 27,
                                                              0.85)),),),
                                                ],
                                              ),
                                              SizedBox(height: 8.h,),
                                              Container(

                                                margin: EdgeInsets.only(
                                                    left: 18.w,
                                                    right: 18.w),
                                                decoration: BoxDecoration(
                                                  borderRadius: BorderRadius
                                                      .circular(30.0),

                                                ),
                                                child: TextField(

                                                    controller: _nametextEditingController,

                                                    style: TextStyle(
                                                      color: Colors.black,
                                                    ),
                                                    decoration: InputDecoration(
                                                      filled: true,
                                                      fillColor: Color.fromRGBO(
                                                          249, 249, 249, 1),
                                                      border: InputBorder.none,


                                                    ),
                                                    onChanged: (text) {
                                                      setState(() {
                                                        if (index == 0) {
                                                          qualiModel.name =
                                                              text;
                                                        } else if (index == 1) {
                                                          qualiModel.MesNum =
                                                              text;
                                                        } else if (index == 2) {
                                                          qualiModel.MesType =
                                                              text;
                                                        }
                                                      });
                                                    }
                                                ),
                                              ),

                                            ],
                                          ),
                                        );
                                      });
                                }
                              }
                            }
                        ),
                      );
                    }
                ),
              ),
            ],
          ),
          ),
          Container(
            height: 80.h,
            color: Colors.white,
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Container(
                    height: 40.h ,
                    margin: EdgeInsets.only(left: 30.w,right: 30.w),
                    decoration: BoxDecoration(
                        color:MyColors.themeColor,
                        borderRadius: BorderRadius.all(Radius.circular(30))),
                    width: double.infinity,
                    child: TextButton(
                      child: Text(isEdit?"提交审核":"编辑",style: TextStyle(color: Colors.white,fontSize: 14.sp,fontWeight: FontWeight.w600),),
                      onPressed: (){
                        if(isEdit==false){
                          setState(() {
                            isEdit=true;
                          });
                        }else {
                          setState(() {
                            isShowError=true;
                          });
                          if (dataList[0] == "") {
                            BrnToast.show(
                              "请输入姓名", context, duration: BrnDuration
                                .short,);
                          }
                          else if (dataList[1] == "") {
                            BrnToast.show("请输入从业资格证号", context,
                              duration: BrnDuration.short,);
                          }
                          else if (dataList[2] == "") {
                            BrnToast.show("请选择有效期", context,
                              duration: BrnDuration.short,);
                          }
                          else if (getFrontPath == "") {
                            BrnToast.show("请添加从业资格证图片", context,
                              duration: BrnDuration.short,);
                          }
                          else {
                            print(dataList[2]);
                            ApiManager.postData(
                              context,
                              'api/auth/driver/user/editQualificationCertificateInfo',
                              {
                                "realName": dataList[0],
                                "qualificationCertificate": dataList[1],
                                "expiryDate": dataList[3],
                                "frontPath": getFrontPath,
                                // "frontPath": "sph56/driver/1781255212293775361/avatar/1781255212293775361_avatar.png",

                                "category": dataList[2],
                                "backPath": ""
                              },
                                  (responseData) async {
                                BrnToast.show("提交成功", context,);
                                Navigator.pop(context, "success");
                              },
                            );
                          }
                        }
                      },
                    )
                ),
              ],
            ),
          ),



          // }),
        ],
      ),


    );
  }
}
